﻿﻿using System.Threading;
using Core.ProcessManager.Process;

namespace Core.ActionLatencyRealization
{
    /// <summary>
    /// Класс-обертка для класса Timer. реализующий необходимый функционал.
    /// </summary>
    public class TimerWrapper : ITimer
    {
        //private readonly Timer _timer;
        private readonly int _executionTime; // Время выполнения
        private readonly int _tickTime; // Период таймера
        private readonly int _tickNumber; // Количество срабатываний таймера

        public int TickNumber
        {
            get { return _tickNumber; }
        }

        private int _tickState;

        public int TickState
        {
            get { return _tickState; }
        }

        public event TimerEvent OnTimerTick;

        public TimerWrapper(int executionTime, int tickNumber)
        {
            _executionTime = executionTime;
            _tickNumber = tickNumber;

            _tickTime = _executionTime/tickNumber;
            //_timer = new Timer(TimerTickCallback, null, Timeout.Infinite, _tickTime);Callback;
        }

        /// <summary>
        /// Остановка таймера при выполнении действия;
        /// </summary>
        /// <param name="state"></param>
        private void TimerTickCallback()//object state, EventArgs eventArgs)
        {
            if (_tickState >= _tickNumber)
            {
                //_timer.Change(Timeout.Infinite, Timeout.Infinite);
                return;
            }

            OnTimerTick(this);
            _tickState++;
        }

        /// <summary>
        /// Запуск таймера.
        /// </summary>
        public void Start()
        {
            //_timer.Change(0, _tickTime);
            for (var i = 0; i < _tickNumber; i++)
            {
                Thread.Sleep(_tickTime);
                TimerTickCallback();
            }
        }
    }
}